home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_10_12
/
1012084b
< prev
next >
Wrap
Text File
|
1992-10-11
|
2KB
|
47 lines
#include "xmath.h"
#include <float.h>
#define twopi 6.28318530717958647693
#define twobypi .63661977236758134308
double _Sin(x, qoff)
double x;
unsigned int qoff;
{ /* sin(x) or cos(x) */
double g, g2;
long quad;
int big;
if ((big = HUGE_RAD < x) || x < -HUGE_RAD) {
g = x * (1 / twopi);
x -= (big ?
(g + 1 / DBL_EPSILON) - 1 / DBL_EPSILON :
1 / DBL_EPSILON - (1 / DBL_EPSILON - g)) *
twopi;
/* Rounding mode doesn't matter */
}
g = quad = x * twobypi + (0 < x ? .5 : -.5);
#if LDBL_DIG > DBL_DIG && 0
g = x - g * 1.57079632679489661923L;
#else
g = (x - g * (3294198. / 2097152.)) - g *
3.139164786504813217e-7;
#endif
g2 = g * g;
if ((qoff += (unsigned long) quad & 3) & 1)
g = 1 + g2 * (-.499999999999999994 + g2 *
(.041666666666666452 + g2 *
(-.001388888888886110 + g2 *
(.000024801587283884 + g2 *
(-.000000275573130985 + g2 *
(.000000002087558246 - g2 *
.000000000011353383))))));
else
g += g * g2 * (-.16666666666666616 + g2 *
(.00833333333332036 + g2 * (-.00019841269828653
+ g2 * (.0000027557313377252
+ g2 * (-.000000025050717097 + g2 *
.00000000015894743)))));
return qoff & 2? -g: g;
}
WRAP_EOF